home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Languages Suite
/
ProgramD2.iso
/
T U R B O Language
/
Turbo C v2.0
/
EMUVARS.ASI
< prev
next >
Wrap
Text File
|
1988-08-29
|
5KB
|
159 lines
; emuVars.asi last modified :- 13 Jul 88
; Turbo-C Run Time Library version 2.0
; Copyright (c) 1986,87,88 by Borland International Inc.
; All Rights Reserved.
; This file is designed to be included both by the start-up
; module (C0.asm, for TC) and by the emulator. The data is
; actually allocated in startup, and externally referenced
; from the emulator.
; 4/15/88 ah:
; Modified for Turbo Pascal using _Pascal_ conditional.
; 7/13/88 rss:
; Data initialization removed, moved to emualor FINIT code.
; Added Safety Stamp so debugger can detect emulator.
IFNDEF _Pascal_ ; if Turbo C version
IFNDEF _InsideEmu87_
PUBLIC emws_limitSP, emws_initialSP,
PUBLIC emws_saveVector,emws_nmiVector
PUBLIC emws_status, emws_control, emws_TOS, emws_adjust
PUBLIC emws_fixSeg, emws_BPsafe
PUBLIC emws_stamp, emws_version
IF _Strict87_
PUBLIC emws_instrnPtr, emws_dataPtr, emws_instruction
ENDIF
ENDIF
; The Use of Interrupt Vectors
; There are 11 interrupt vectors. The first 8 map onto the 8 floating
; point instruction patterns:
; {WAIT ESC n } --> INT (34h + n), where n is in (0..7)
; No segment prefixes may apply to these patterns.
; The ninth interrupt provides instructions with segment prefixes:
; {WAIT ES: ESC n } --> INT (3Ch), byte (C0h + n)
; {WAIT CS: ESC n } --> INT (3Ch), byte (80h + n)
; {WAIT SS: ESC n } --> INT (3Ch), byte (40h + n)
; {WAIT DS: ESC n } --> INT (3Ch), byte (00h + n)
; The tenth interrupt corresponds to the sequence NOP, FWAIT, and
; is a no-op for emulation purposes.
; The eleventh interrupt provides Borland-defined shortcuts.
; Data space is actually allocated in the stack segment by C0.asm,
; the start-up module, and accessed by the emulator via externs.
; It is initialized during the first emulated FINIT instruction.
IFNDEF _InsideEmu87_ ; if we are building C0.obj
; Allocate a set of 8 iNDP registers, plus extras for workspace
emws_limitSP label word
db (16 * 12) DUP (?)
emws_initialSP label word
; Append a spare for underflow situations.
dw 6 dup (?)
emws_saveVector dd ? ; prior contents of NMI vector
emws_nmiVector dd ? ; PC/AT error vector for 80287 exceptions
emws_status dw ? ; result of comparisons
emws_control dw ? ; processing options and exceptions.
emws_TOS dw ? ; current level of e87 register stack
emws_adjust dw ? ; adjusts TOS at exit
emws_fixSeg dw ? ; selector implied by segFix
emws_BPsafe dw ? ; keep BP --> userRegs here for safety.
emws_stamp dd ? ; after initialization, 'emu', 87h
emws_version dw ? ; 1 for TC2, TP5; 2 for TB2
IF _Strict87_
emws_instrnPtr dd ? ; used with error recovery
emws_dataPtr dd ? ; --------- " ------------
emws_instruction dw ? ; bytes swapped, used for error recovery
ENDIF
ELSE ; _InsideEmu87_, we are building the emulator
EXTRN emws_limitSP : WORD
EXTRN emws_initialSP : WORD
EXTRN emws_saveVector : DWORD
EXTRN emws_nmiVector : DWORD
EXTRN emws_status : WORD
EXTRN emws_control : WORD
EXTRN emws_TOS : WORD
EXTRN emws_adjust : WORD
EXTRN emws_fixSeg : WORD
EXTRN emws_BPsafe : WORD
EXTRN emws_stamp : DWORD
EXTRN emws_version : WORD
IF _Strict87_
EXTRN emws_instrnPtr : DWORD
EXTRN emws_dataPtr : DWORD
EXTRN emws_instruction: DWORD
ENDIF
EmuAssume@ MACRO aSeg
ASSUME aSeg : SEG emws_TOS
ENDM
EmuNothing@ MACRO aSeg
ASSUME aSeg : NOTHING
ENDM
ENDIF
ELSE ; _Pascal_, Turbo Pascal version
; Turbo Pascal's linker does not allow explicit references to the
; stack segment, so instead of the above PUBLICs and EXTRNs we
; define the following equates for the emulators variables. These
; declarations cause the assembler to use DS as the default segment
; register, so an SS: override MUST be coded in places where DS is
; not yet set up.
; Note: The Turbo Pascal runtime library assumes that an FINIT will
; correctly initialize all emulator variables. Turbo Pascal never
; initializes them, nor does it ever directly reference any of them.
emws_limitSP equ (word ptr DS: 0)
emws_initialSP equ (word ptr DS: 192)
emws_saveVector equ (dword ptr DS: 204)
emws_nmiVector equ (dword ptr DS: 208)
emws_status equ (word ptr DS: 212)
emws_control equ (word ptr DS: 214)
emws_TOS equ (word ptr DS: 216)
emws_adjust equ (word ptr DS: 218)
emws_fixSeg equ (word ptr DS: 220)
emws_BPsafe equ (word ptr DS: 222)
emws_stamp equ (word ptr DS: 224)
emws_version equ (word ptr DS: 228)
EmuAssume@ MACRO aSeg
ASSUME aSeg : NOTHING
ENDM
EmuNothing@ MACRO aSeg
ASSUME aSeg : NOTHING
ENDM
ENDIF